// useGeoJsonManager.ts
import { ref, onMounted } from "vue";

// 定义 GeoJson 数据接口
interface GeoJsonData {
  province: Record<string, any>; // 省级数据
  district: Record<string, any>; // 区级数据
  area: Record<string, any>; // 区域数据
}

// useGeoJsonManager 函数用于加载和管理 GeoJson 数据
export function useGeoJsonManager(fileNames: {
  province: string[];
  district: string[];
  area: string[];
}) {
  // 响应式的 GeoJson 数据对象
  const geoJsonData = ref<GeoJsonData>({
    province: {},
    district: {},
    area: {},
  });

  // 加载 GeoJson 数据的函数
  const loadGeoJsonData = async () => {
    let newGeoJsonData: GeoJsonData = {
      province: {},
      district: {},
      area: {},
    };

    // 加载省份数据
    const loadProvincePromises = fileNames.province.map(async (fileName) => {
      try {
        const response = await fetch(
          `${window.location.origin}/data/geoJson/${fileName}.json`
        );
        const jsonData = await response.json();
        newGeoJsonData.province[fileName] = jsonData; // 将省份数据存储在对象中
      } catch (error) {
        console.error(`加载省份 ${fileName} 时出错:`, error);
      }
    });

    // 加载地区数据
    const loadDistrictPromises = fileNames.district.map(async (fileName) => {
      try {
        const response = await fetch(
          `${window.location.origin}/data/geoJson/${fileName}.json`
        );
        const jsonData = await response.json();
        newGeoJsonData.district[fileName] = jsonData; // 将地区数据存储在对象中
      } catch (error) {
        console.error(`加载地区 ${fileName} 时出错:`, error);
      }
    });

    // 加载区域数据
    const loadAreaPromises = fileNames.area.map(async (fileName) => {
      try {
        const response = await fetch(
          `${window.location.origin}/data/geoJson/${fileName}.json`
        );
        const jsonData = await response.json();
        newGeoJsonData.area[fileName] = jsonData; // 将区域数据存储在对象中
      } catch (error) {
        console.error(`加载区域 ${fileName} 时出错:`, error);
      }
    });

    // 等待所有文件加载完成
    await Promise.all([
      ...loadProvincePromises,
      ...loadDistrictPromises,
      ...loadAreaPromises,
    ]);

    // 更新状态
    geoJsonData.value = newGeoJsonData;
  };

  // 在组件挂载时加载数据
  onMounted(() => {
    loadGeoJsonData();
  });

  // 获取指定省份数据
  const getProvinceData = (provinceKey: string) => {
    return geoJsonData.value.province[provinceKey] || null;
  };

  // 获取指定市数据
  const getDistrictData = (districtKey: string) => {
    return geoJsonData.value.district[districtKey] || null;
  };

  // 获取所有地区数据，支持按省份筛选
  const getAllDistrictData = (provinceKey: string | null = null) => {
    const districtData = Object.values(geoJsonData.value.district);
    if (provinceKey) {
      return districtData.filter((data) => data.province === provinceKey);
    }
    return districtData;
  };

  // 获取所有区域数据
  const getAllAreaData = () => {
    return Object.values(geoJsonData.value.area);
  };

  // 获取所有数据，合并省、市、区
  const getAllGeoJsonData = () => {
    return [
      ...Object.values(geoJsonData.value.province),
      ...Object.values(geoJsonData.value.district),
      ...Object.values(geoJsonData.value.area),
    ];
  };

  return {
    geoJsonData, //全部数据结构
    getProvinceData, //所有省数据
    getDistrictData, //指定市数据
    getAllDistrictData, //所有市数据
    getAllAreaData, // 所有区域数据
    getAllGeoJsonData, // 合并数据
  };
}
